#include <ProcGenPlugin/ProcGenPluginPCH.h>

#include <Foundation/Containers/HashTable.h>
#include <ProcGenPlugin/Declarations.h>

namespace ezProcGenInternal
{
  // Source: https://c-core-games.com/Generator/PlacementPatterns.html?t=R&s=16&ps=abcde&pr=0.73&pt=100&ri=500&ts=abababxx&ti=5000&st=true
  static Pattern::Point s_RegularGridPoints[] = {
    {0.50f, 0.50f, 0.984f},
    {0.50f, 1.50f, 0.699f},
    {0.50f, 2.50f, 0.094f},
    {0.50f, 3.50f, 0.258f},
    {0.50f, 4.50f, 0.957f},
    {0.50f, 5.50f, 0.582f},
    {0.50f, 6.50f, 0.902f},
    {0.50f, 7.50f, 0.340f},
    {0.50f, 8.50f, 0.801f},
    {0.50f, 9.50f, 0.004f},
    {0.50f, 10.50f, 0.391f},
    {0.50f, 11.50f, 0.707f},
    {0.50f, 12.50f, 0.301f},
    {0.50f, 13.50f, 0.559f},
    {0.50f, 14.50f, 0.762f},
    {0.50f, 15.50f, 0.605f},
    {1.50f, 0.50f, 0.043f},
    {1.50f, 1.50f, 0.422f},
    {1.50f, 2.50f, 0.805f},
    {1.50f, 3.50f, 0.508f},
    {1.50f, 4.50f, 0.020f},
    {1.50f, 5.50f, 0.387f},
    {1.50f, 6.50f, 0.711f},
    {1.50f, 7.50f, 0.176f},
    {1.50f, 8.50f, 0.473f},
    {1.50f, 9.50f, 0.949f},
    {1.50f, 10.50f, 0.516f},
    {1.50f, 11.50f, 0.145f},
    {1.50f, 12.50f, 0.969f},
    {1.50f, 13.50f, 0.098f},
    {1.50f, 14.50f, 0.336f},
    {1.50f, 15.50f, 0.234f},
    {2.50f, 0.50f, 0.730f},
    {2.50f, 1.50f, 0.563f},
    {2.50f, 2.50f, 0.355f},
    {2.50f, 3.50f, 0.863f},
    {2.50f, 4.50f, 0.750f},
    {2.50f, 5.50f, 0.141f},
    {2.50f, 6.50f, 0.531f},
    {2.50f, 7.50f, 0.824f},
    {2.50f, 8.50f, 0.082f},
    {2.50f, 9.50f, 0.590f},
    {2.50f, 10.50f, 0.738f},
    {2.50f, 11.50f, 0.277f},
    {2.50f, 12.50f, 0.836f},
    {2.50f, 13.50f, 0.652f},
    {2.50f, 14.50f, 0.438f},
    {2.50f, 15.50f, 0.895f},
    {3.50f, 0.50f, 0.148f},
    {3.50f, 1.50f, 0.953f},
    {3.50f, 2.50f, 0.113f},
    {3.50f, 3.50f, 0.227f},
    {3.50f, 4.50f, 0.625f},
    {3.50f, 5.50f, 0.285f},
    {3.50f, 6.50f, 0.988f},
    {3.50f, 7.50f, 0.434f},
    {3.50f, 8.50f, 0.242f},
    {3.50f, 9.50f, 0.883f},
    {3.50f, 10.50f, 0.363f},
    {3.50f, 11.50f, 0.051f},
    {3.50f, 12.50f, 0.484f},
    {3.50f, 13.50f, 0.180f},
    {3.50f, 14.50f, 0.809f},
    {3.50f, 15.50f, 0.520f},
    {4.50f, 0.50f, 0.637f},
    {4.50f, 1.50f, 0.316f},
    {4.50f, 2.50f, 0.691f},
    {4.50f, 3.50f, 0.480f},
    {4.50f, 4.50f, 0.930f},
    {4.50f, 5.50f, 0.090f},
    {4.50f, 6.50f, 0.598f},
    {4.50f, 7.50f, 0.352f},
    {4.50f, 8.50f, 0.672f},
    {4.50f, 9.50f, 0.121f},
    {4.50f, 10.50f, 0.613f},
    {4.50f, 11.50f, 0.766f},
    {4.50f, 12.50f, 0.926f},
    {4.50f, 13.50f, 0.367f},
    {4.50f, 14.50f, 0.066f},
    {4.50f, 15.50f, 0.254f},
    {5.50f, 0.50f, 0.402f},
    {5.50f, 1.50f, 0.875f},
    {5.50f, 2.50f, 0.008f},
    {5.50f, 3.50f, 0.813f},
    {5.50f, 4.50f, 0.383f},
    {5.50f, 5.50f, 0.734f},
    {5.50f, 6.50f, 0.859f},
    {5.50f, 7.50f, 0.027f},
    {5.50f, 8.50f, 0.797f},
    {5.50f, 9.50f, 0.961f},
    {5.50f, 10.50f, 0.441f},
    {5.50f, 11.50f, 0.230f},
    {5.50f, 12.50f, 0.555f},
    {5.50f, 13.50f, 0.680f},
    {5.50f, 14.50f, 0.977f},
    {5.50f, 15.50f, 0.773f},
    {6.50f, 0.50f, 0.602f},
    {6.50f, 1.50f, 0.168f},
    {6.50f, 2.50f, 0.461f},
    {6.50f, 3.50f, 0.570f},
    {6.50f, 4.50f, 0.188f},
    {6.50f, 5.50f, 0.305f},
    {6.50f, 6.50f, 0.465f},
    {6.50f, 7.50f, 0.172f},
    {6.50f, 8.50f, 0.551f},
    {6.50f, 9.50f, 0.293f},
    {6.50f, 10.50f, 0.160f},
    {6.50f, 11.50f, 0.871f},
    {6.50f, 12.50f, 0.012f},
    {6.50f, 13.50f, 0.270f},
    {6.50f, 14.50f, 0.500f},
    {6.50f, 15.50f, 0.105f},
    {7.50f, 0.50f, 0.914f},
    {7.50f, 1.50f, 0.719f},
    {7.50f, 2.50f, 0.273f},
    {7.50f, 3.50f, 0.980f},
    {7.50f, 4.50f, 0.059f},
    {7.50f, 5.50f, 0.641f},
    {7.50f, 6.50f, 0.918f},
    {7.50f, 7.50f, 0.703f},
    {7.50f, 8.50f, 0.371f},
    {7.50f, 9.50f, 0.746f},
    {7.50f, 10.50f, 0.523f},
    {7.50f, 11.50f, 0.660f},
    {7.50f, 12.50f, 0.410f},
    {7.50f, 13.50f, 0.742f},
    {7.50f, 14.50f, 0.852f},
    {7.50f, 15.50f, 0.297f},
    {8.50f, 0.50f, 0.039f},
    {8.50f, 1.50f, 0.418f},
    {8.50f, 2.50f, 0.848f},
    {8.50f, 3.50f, 0.668f},
    {8.50f, 4.50f, 0.777f},
    {8.50f, 5.50f, 0.535f},
    {8.50f, 6.50f, 0.109f},
    {8.50f, 7.50f, 0.246f},
    {8.50f, 8.50f, 0.996f},
    {8.50f, 9.50f, 0.055f},
    {8.50f, 10.50f, 0.840f},
    {8.50f, 11.50f, 0.137f},
    {8.50f, 12.50f, 0.945f},
    {8.50f, 13.50f, 0.184f},
    {8.50f, 14.50f, 0.359f},
    {8.50f, 15.50f, 0.566f},
    {9.50f, 0.50f, 0.207f},
    {9.50f, 1.50f, 0.527f},
    {9.50f, 2.50f, 0.156f},
    {9.50f, 3.50f, 0.379f},
    {9.50f, 4.50f, 0.215f},
    {9.50f, 5.50f, 0.324f},
    {9.50f, 6.50f, 0.820f},
    {9.50f, 7.50f, 0.488f},
    {9.50f, 8.50f, 0.621f},
    {9.50f, 9.50f, 0.406f},
    {9.50f, 10.50f, 0.262f},
    {9.50f, 11.50f, 0.477f},
    {9.50f, 12.50f, 0.609f},
    {9.50f, 13.50f, 0.070f},
    {9.50f, 14.50f, 0.676f},
    {9.50f, 15.50f, 1.000f},
    {10.50f, 0.50f, 0.754f},
    {10.50f, 1.50f, 0.898f},
    {10.50f, 2.50f, 0.074f},
    {10.50f, 3.50f, 0.594f},
    {10.50f, 4.50f, 0.934f},
    {10.50f, 5.50f, 0.457f},
    {10.50f, 6.50f, 0.023f},
    {10.50f, 7.50f, 0.891f},
    {10.50f, 8.50f, 0.199f},
    {10.50f, 9.50f, 0.758f},
    {10.50f, 10.50f, 0.910f},
    {10.50f, 11.50f, 0.328f},
    {10.50f, 12.50f, 0.793f},
    {10.50f, 13.50f, 0.398f},
    {10.50f, 14.50f, 0.828f},
    {10.50f, 15.50f, 0.453f},
    {11.50f, 0.50f, 0.617f},
    {11.50f, 1.50f, 0.332f},
    {11.50f, 2.50f, 0.727f},
    {11.50f, 3.50f, 0.832f},
    {11.50f, 4.50f, 0.133f},
    {11.50f, 5.50f, 0.629f},
    {11.50f, 6.50f, 0.715f},
    {11.50f, 7.50f, 0.348f},
    {11.50f, 8.50f, 0.586f},
    {11.50f, 9.50f, 0.129f},
    {11.50f, 10.50f, 0.664f},
    {11.50f, 11.50f, 0.016f},
    {11.50f, 12.50f, 0.539f},
    {11.50f, 13.50f, 0.211f},
    {11.50f, 14.50f, 0.125f},
    {11.50f, 15.50f, 0.281f},
    {12.50f, 0.50f, 0.047f},
    {12.50f, 1.50f, 0.219f},
    {12.50f, 2.50f, 0.426f},
    {12.50f, 3.50f, 0.512f},
    {12.50f, 4.50f, 0.250f},
    {12.50f, 5.50f, 0.375f},
    {12.50f, 6.50f, 0.992f},
    {12.50f, 7.50f, 0.078f},
    {12.50f, 8.50f, 0.785f},
    {12.50f, 9.50f, 0.504f},
    {12.50f, 10.50f, 0.223f},
    {12.50f, 11.50f, 0.973f},
    {12.50f, 12.50f, 0.723f},
    {12.50f, 13.50f, 0.887f},
    {12.50f, 14.50f, 0.574f},
    {12.50f, 15.50f, 0.941f},
    {13.50f, 0.50f, 0.844f},
    {13.50f, 1.50f, 0.543f},
    {13.50f, 2.50f, 0.965f},
    {13.50f, 3.50f, 0.035f},
    {13.50f, 4.50f, 0.695f},
    {13.50f, 5.50f, 0.867f},
    {13.50f, 6.50f, 0.164f},
    {13.50f, 7.50f, 0.547f},
    {13.50f, 8.50f, 0.289f},
    {13.50f, 9.50f, 0.855f},
    {13.50f, 10.50f, 0.414f},
    {13.50f, 11.50f, 0.313f},
    {13.50f, 12.50f, 0.086f},
    {13.50f, 13.50f, 0.469f},
    {13.50f, 14.50f, 0.344f},
    {13.50f, 15.50f, 0.688f},
    {14.50f, 0.50f, 0.395f},
    {14.50f, 1.50f, 0.645f},
    {14.50f, 2.50f, 0.152f},
    {14.50f, 3.50f, 0.781f},
    {14.50f, 4.50f, 0.309f},
    {14.50f, 5.50f, 0.492f},
    {14.50f, 6.50f, 0.770f},
    {14.50f, 7.50f, 0.430f},
    {14.50f, 8.50f, 0.938f},
    {14.50f, 9.50f, 0.102f},
    {14.50f, 10.50f, 0.578f},
    {14.50f, 11.50f, 0.816f},
    {14.50f, 12.50f, 0.648f},
    {14.50f, 13.50f, 0.238f},
    {14.50f, 14.50f, 0.789f},
    {14.50f, 15.50f, 0.117f},
    {15.50f, 0.50f, 0.191f},
    {15.50f, 1.50f, 0.320f},
    {15.50f, 2.50f, 0.879f},
    {15.50f, 3.50f, 0.449f},
    {15.50f, 4.50f, 0.656f},
    {15.50f, 5.50f, 0.203f},
    {15.50f, 6.50f, 0.063f},
    {15.50f, 7.50f, 0.633f},
    {15.50f, 8.50f, 0.266f},
    {15.50f, 9.50f, 0.684f},
    {15.50f, 10.50f, 0.195f},
    {15.50f, 11.50f, 0.906f},
    {15.50f, 12.50f, 0.445f},
    {15.50f, 13.50f, 0.031f},
    {15.50f, 14.50f, 0.922f},
    {15.50f, 15.50f, 0.496f},
  };

  // Source: https://c-core-games.com/Generator/PlacementPatterns.html?t=H&s=16&ps=abcde&pr=0.73&pt=100&ri=500&ts=abababxx&ti=5000&st=true
  static Pattern::Point s_HexGridPoints[] = {
    {0.00f, 1.39f, 0.852f},
    {0.00f, 3.17f, 0.937f},
    {0.00f, 4.94f, 0.337f},
    {0.00f, 6.72f, 0.430f},
    {0.00f, 8.50f, 0.719f},
    {0.00f, 10.28f, 0.807f},
    {0.00f, 12.06f, 0.700f},
    {0.00f, 13.83f, 0.811f},
    {0.00f, 15.61f, 0.230f},
    {0.50f, 0.50f, 0.652f},
    {0.50f, 2.28f, 0.137f},
    {0.50f, 4.06f, 0.741f},
    {0.50f, 5.83f, 0.563f},
    {0.50f, 7.61f, 0.119f},
    {0.50f, 9.39f, 0.944f},
    {0.50f, 11.17f, 0.548f},
    {0.50f, 12.94f, 0.970f},
    {0.50f, 14.72f, 0.467f},
    {1.07f, 1.39f, 0.411f},
    {1.07f, 3.17f, 0.226f},
    {1.07f, 4.94f, 0.056f},
    {1.07f, 6.72f, 0.244f},
    {1.07f, 8.50f, 0.596f},
    {1.07f, 10.28f, 0.211f},
    {1.07f, 12.06f, 0.078f},
    {1.07f, 13.83f, 0.267f},
    {1.07f, 15.61f, 0.915f},
    {1.57f, 0.50f, 0.019f},
    {1.57f, 2.28f, 0.559f},
    {1.57f, 4.06f, 0.444f},
    {1.57f, 5.83f, 0.648f},
    {1.57f, 7.61f, 0.815f},
    {1.57f, 9.39f, 0.367f},
    {1.57f, 11.17f, 0.456f},
    {1.57f, 12.94f, 0.352f},
    {1.57f, 14.72f, 0.589f},
    {2.13f, 1.39f, 0.307f},
    {2.13f, 3.17f, 0.844f},
    {2.13f, 4.94f, 0.989f},
    {2.13f, 6.72f, 0.896f},
    {2.13f, 8.50f, 0.015f},
    {2.13f, 10.28f, 0.907f},
    {2.13f, 12.06f, 0.756f},
    {2.13f, 13.83f, 0.126f},
    {2.13f, 15.61f, 0.785f},
    {2.63f, 0.50f, 0.204f},
    {2.63f, 2.28f, 0.726f},
    {2.63f, 4.06f, 0.348f},
    {2.63f, 5.83f, 0.159f},
    {2.63f, 7.61f, 0.485f},
    {2.63f, 9.39f, 0.681f},
    {2.63f, 11.17f, 0.289f},
    {2.63f, 12.94f, 0.870f},
    {2.63f, 14.72f, 0.419f},
    {3.20f, 1.39f, 0.481f},
    {3.20f, 3.17f, 0.104f},
    {3.20f, 4.94f, 0.530f},
    {3.20f, 6.72f, 0.319f},
    {3.20f, 8.50f, 0.196f},
    {3.20f, 10.28f, 0.522f},
    {3.20f, 12.06f, 0.604f},
    {3.20f, 13.83f, 0.696f},
    {3.20f, 15.61f, 0.974f},
    {3.70f, 0.50f, 0.667f},
    {3.70f, 2.28f, 0.904f},
    {3.70f, 4.06f, 0.793f},
    {3.70f, 5.83f, 0.685f},
    {3.70f, 7.61f, 0.759f},
    {3.70f, 9.39f, 0.415f},
    {3.70f, 11.17f, 0.044f},
    {3.70f, 12.94f, 0.170f},
    {3.70f, 14.72f, 0.067f},
    {4.27f, 1.39f, 0.141f},
    {4.27f, 3.17f, 0.607f},
    {4.27f, 4.94f, 0.274f},
    {4.27f, 6.72f, 0.081f},
    {4.27f, 8.50f, 0.978f},
    {4.27f, 10.28f, 0.781f},
    {4.27f, 12.06f, 0.959f},
    {4.27f, 13.83f, 0.541f},
    {4.27f, 15.61f, 0.330f},
    {4.77f, 0.50f, 0.578f},
    {4.77f, 2.28f, 0.385f},
    {4.77f, 4.06f, 0.004f},
    {4.77f, 5.83f, 0.422f},
    {4.77f, 7.61f, 0.585f},
    {4.77f, 9.39f, 0.115f},
    {4.77f, 11.17f, 0.219f},
    {4.77f, 12.94f, 0.396f},
    {4.77f, 14.72f, 0.848f},
    {5.33f, 1.39f, 0.941f},
    {5.33f, 3.17f, 0.233f},
    {5.33f, 4.94f, 0.933f},
    {5.33f, 6.72f, 0.881f},
    {5.33f, 8.50f, 0.363f},
    {5.33f, 10.28f, 0.863f},
    {5.33f, 12.06f, 0.670f},
    {5.33f, 13.83f, 0.252f},
    {5.33f, 15.61f, 0.744f},
    {5.83f, 0.50f, 0.033f},
    {5.83f, 2.28f, 0.711f},
    {5.83f, 4.06f, 0.519f},
    {5.83f, 5.83f, 0.737f},
    {5.83f, 7.61f, 0.241f},
    {5.83f, 9.39f, 0.622f},
    {5.83f, 11.17f, 0.489f},
    {5.83f, 12.94f, 0.774f},
    {5.83f, 14.72f, 0.448f},
    {6.40f, 1.39f, 0.285f},
    {6.40f, 3.17f, 0.833f},
    {6.40f, 4.94f, 0.122f},
    {6.40f, 6.72f, 0.496f},
    {6.40f, 8.50f, 0.804f},
    {6.40f, 10.28f, 0.281f},
    {6.40f, 12.06f, 0.356f},
    {6.40f, 13.83f, 0.089f},
    {6.40f, 15.61f, 0.193f},
    {6.90f, 0.50f, 0.511f},
    {6.90f, 2.28f, 0.463f},
    {6.90f, 4.06f, 0.633f},
    {6.90f, 5.83f, 0.296f},
    {6.90f, 7.61f, 0.030f},
    {6.90f, 9.39f, 0.533f},
    {6.90f, 11.17f, 0.011f},
    {6.90f, 12.94f, 0.911f},
    {6.90f, 14.72f, 0.996f},
    {7.47f, 1.39f, 0.867f},
    {7.47f, 3.17f, 0.178f},
    {7.47f, 4.94f, 0.370f},
    {7.47f, 6.72f, 0.656f},
    {7.47f, 8.50f, 0.152f},
    {7.47f, 10.28f, 0.926f},
    {7.47f, 12.06f, 0.156f},
    {7.47f, 13.83f, 0.526f},
    {7.47f, 15.61f, 0.644f},
    {7.97f, 0.50f, 0.763f},
    {7.97f, 2.28f, 0.052f},
    {7.97f, 4.06f, 0.993f},
    {7.97f, 5.83f, 0.830f},
    {7.97f, 7.61f, 0.948f},
    {7.97f, 9.39f, 0.693f},
    {7.97f, 11.17f, 0.730f},
    {7.97f, 12.94f, 0.619f},
    {7.97f, 14.72f, 0.311f},
    {8.53f, 1.39f, 0.344f},
    {8.53f, 3.17f, 0.400f},
    {8.53f, 4.94f, 0.093f},
    {8.53f, 6.72f, 0.185f},
    {8.53f, 8.50f, 0.470f},
    {8.53f, 10.28f, 0.326f},
    {8.53f, 12.06f, 0.426f},
    {8.53f, 13.83f, 0.796f},
    {8.53f, 15.61f, 0.107f},
    {9.03f, 0.50f, 0.930f},
    {9.03f, 2.28f, 0.611f},
    {9.03f, 4.06f, 0.678f},
    {9.03f, 5.83f, 0.552f},
    {9.03f, 7.61f, 0.393f},
    {9.03f, 9.39f, 0.222f},
    {9.03f, 11.17f, 0.822f},
    {9.03f, 12.94f, 0.200f},
    {9.03f, 14.72f, 0.404f},
    {9.60f, 1.39f, 0.167f},
    {9.60f, 3.17f, 0.800f},
    {9.60f, 4.94f, 0.889f},
    {9.60f, 6.72f, 0.752f},
    {9.60f, 8.50f, 0.859f},
    {9.60f, 10.28f, 0.096f},
    {9.60f, 12.06f, 0.504f},
    {9.60f, 13.83f, 0.893f},
    {9.60f, 15.61f, 0.259f},
    {10.10f, 0.50f, 0.689f},
    {10.10f, 2.28f, 0.544f},
    {10.10f, 4.06f, 0.207f},
    {10.10f, 5.83f, 0.459f},
    {10.10f, 7.61f, 0.048f},
    {10.10f, 9.39f, 0.574f},
    {10.10f, 11.17f, 0.956f},
    {10.10f, 12.94f, 0.037f},
    {10.10f, 14.72f, 0.600f},
    {10.67f, 1.39f, 0.874f},
    {10.67f, 3.17f, 0.441f},
    {10.67f, 4.94f, 0.333f},
    {10.67f, 6.72f, 0.263f},
    {10.67f, 8.50f, 0.641f},
    {10.67f, 10.28f, 0.381f},
    {10.67f, 12.06f, 0.278f},
    {10.67f, 13.83f, 0.715f},
    {10.67f, 15.61f, 0.085f},
    {11.17f, 0.50f, 0.500f},
    {11.17f, 2.28f, 0.300f},
    {11.17f, 4.06f, 0.059f},
    {11.17f, 5.83f, 0.704f},
    {11.17f, 7.61f, 0.985f},
    {11.17f, 9.39f, 0.789f},
    {11.17f, 11.17f, 0.659f},
    {11.17f, 12.94f, 0.556f},
    {11.17f, 14.72f, 0.967f},
    {11.73f, 1.39f, 0.007f},
    {11.73f, 3.17f, 0.952f},
    {11.73f, 4.94f, 0.919f},
    {11.73f, 6.72f, 0.133f},
    {11.73f, 8.50f, 0.315f},
    {11.73f, 10.28f, 0.181f},
    {11.73f, 12.06f, 0.837f},
    {11.73f, 13.83f, 0.130f},
    {11.73f, 15.61f, 0.433f},
    {12.23f, 0.50f, 0.826f},
    {12.23f, 2.28f, 0.733f},
    {12.23f, 4.06f, 0.626f},
    {12.23f, 5.83f, 0.570f},
    {12.23f, 7.61f, 0.507f},
    {12.23f, 9.39f, 0.437f},
    {12.23f, 11.17f, 0.070f},
    {12.23f, 12.94f, 0.374f},
    {12.23f, 14.72f, 0.322f},
    {12.80f, 1.39f, 0.248f},
    {12.80f, 3.17f, 0.148f},
    {12.80f, 4.94f, 0.237f},
    {12.80f, 6.72f, 0.819f},
    {12.80f, 8.50f, 0.900f},
    {12.80f, 10.28f, 0.722f},
    {12.80f, 12.06f, 0.474f},
    {12.80f, 13.83f, 0.856f},
    {12.80f, 15.61f, 0.174f},
    {13.30f, 0.50f, 0.637f},
    {13.30f, 2.28f, 0.537f},
    {13.30f, 4.06f, 0.778f},
    {13.30f, 5.83f, 0.378f},
    {13.30f, 7.61f, 0.022f},
    {13.30f, 9.39f, 0.144f},
    {13.30f, 11.17f, 1.000f},
    {13.30f, 12.94f, 0.748f},
    {13.30f, 14.72f, 0.581f},
    {13.87f, 1.39f, 0.981f},
    {13.87f, 3.17f, 0.359f},
    {13.87f, 4.94f, 0.493f},
    {13.87f, 6.72f, 0.615f},
    {13.87f, 8.50f, 0.256f},
    {13.87f, 10.28f, 0.567f},
    {13.87f, 12.06f, 0.270f},
    {13.87f, 13.83f, 0.215f},
    {13.87f, 15.61f, 0.707f},
    {14.37f, 0.50f, 0.074f},
    {14.37f, 2.28f, 0.452f},
    {14.37f, 4.06f, 0.885f},
    {14.37f, 5.83f, 0.100f},
    {14.37f, 7.61f, 0.770f},
    {14.37f, 9.39f, 0.663f},
    {14.37f, 11.17f, 0.878f},
    {14.37f, 12.94f, 0.026f},
    {14.37f, 14.72f, 0.922f},
    {14.93f, 1.39f, 0.293f},
    {14.93f, 3.17f, 0.041f},
    {14.93f, 4.94f, 0.189f},
    {14.93f, 6.72f, 0.963f},
    {14.93f, 8.50f, 0.478f},
    {14.93f, 10.28f, 0.341f},
    {14.93f, 12.06f, 0.407f},
    {14.93f, 13.83f, 0.515f},
    {14.93f, 15.61f, 0.389f},
    {15.43f, 0.50f, 0.767f},
    {15.43f, 2.28f, 0.593f},
    {15.43f, 4.06f, 0.674f},
    {15.43f, 5.83f, 0.841f},
    {15.43f, 7.61f, 0.304f},
    {15.43f, 9.39f, 0.063f},
    {15.43f, 11.17f, 0.163f},
    {15.43f, 12.94f, 0.630f},
    {15.43f, 14.72f, 0.111f},
  };

  // Source: https://c-core-games.com/Generator/PlacementPatterns.html?t=N&s=16&ps=abcde&pr=0.73&pt=100&ri=500&ts=abababxx&ti=5000&st=true
  static Pattern::Point s_NaturalPoints[] = {
    {0.08f, 8.51f, 0.398f},
    {0.12f, 3.82f, 0.930f},
    {0.16f, 15.82f, 0.953f},
    {0.20f, 11.78f, 0.430f},
    {0.35f, 10.82f, 0.309f},
    {0.39f, 5.67f, 0.879f},
    {0.48f, 14.91f, 0.363f},
    {0.52f, 2.61f, 0.223f},
    {0.55f, 13.82f, 0.207f},
    {0.59f, 9.43f, 0.844f},
    {0.63f, 7.51f, 0.992f},
    {0.70f, 4.67f, 0.371f},
    {0.75f, 12.77f, 0.902f},
    {0.79f, 0.60f, 0.555f},
    {0.99f, 1.60f, 0.332f},
    {1.03f, 6.51f, 0.160f},
    {1.05f, 3.50f, 0.484f},
    {1.13f, 8.49f, 0.477f},
    {1.16f, 10.30f, 0.730f},
    {1.18f, 11.76f, 0.152f},
    {1.37f, 15.76f, 0.094f},
    {1.42f, 14.74f, 0.734f},
    {1.44f, 5.51f, 0.242f},
    {1.54f, 13.68f, 0.563f},
    {1.56f, 2.51f, 0.617f},
    {1.62f, 7.51f, 0.746f},
    {1.66f, 4.46f, 0.805f},
    {1.70f, 9.40f, 0.219f},
    {1.77f, 12.72f, 0.016f},
    {1.78f, 0.87f, 0.875f},
    {1.80f, 11.02f, 0.516f},
    {2.05f, 6.53f, 0.594f},
    {2.07f, 3.51f, 0.074f},
    {2.19f, 8.45f, 0.035f},
    {2.22f, 1.77f, 0.738f},
    {2.34f, 11.92f, 0.645f},
    {2.39f, 15.21f, 0.258f},
    {2.39f, 10.20f, 0.949f},
    {2.40f, 14.22f, 0.988f},
    {2.42f, 5.53f, 0.445f},
    {2.46f, 0.13f, 0.457f},
    {2.63f, 7.50f, 0.340f},
    {2.67f, 4.54f, 0.668f},
    {2.68f, 2.73f, 0.980f},
    {2.69f, 13.17f, 0.344f},
    {2.83f, 9.26f, 0.570f},
    {2.95f, 11.11f, 0.289f},
    {2.97f, 0.99f, 0.191f},
    {3.06f, 6.43f, 0.090f},
    {3.18f, 3.71f, 0.176f},
    {3.24f, 12.32f, 0.871f},
    {3.34f, 8.41f, 0.895f},
    {3.34f, 1.95f, 0.414f},
    {3.36f, 13.98f, 0.133f},
    {3.40f, 15.04f, 0.609f},
    {3.43f, 5.36f, 0.938f},
    {3.48f, 10.05f, 0.109f},
    {3.54f, 0.04f, 0.828f},
    {3.59f, 7.37f, 0.832f},
    {3.81f, 2.93f, 0.539f},
    {3.88f, 4.43f, 0.320f},
    {3.93f, 13.14f, 0.703f},
    {3.93f, 10.97f, 0.777f},
    {4.00f, 1.05f, 0.004f},
    {4.05f, 6.28f, 0.523f},
    {4.05f, 9.25f, 0.402f},
    {4.08f, 11.90f, 0.441f},
    {4.29f, 14.25f, 0.492f},
    {4.38f, 8.26f, 0.625f},
    {4.40f, 2.11f, 0.277f},
    {4.41f, 15.31f, 0.316f},
    {4.49f, 5.34f, 0.707f},
    {4.52f, 3.58f, 0.859f},
    {4.55f, 7.22f, 0.215f},
    {4.63f, 10.32f, 0.195f},
    {4.65f, 0.26f, 0.688f},
    {4.81f, 12.64f, 0.039f},
    {5.01f, 4.46f, 0.043f},
    {5.02f, 1.31f, 0.914f},
    {5.04f, 11.60f, 0.551f},
    {5.05f, 9.42f, 0.680f},
    {5.08f, 13.59f, 0.801f},
    {5.14f, 6.30f, 0.137f},
    {5.18f, 2.69f, 0.629f},
    {5.26f, 14.65f, 0.941f},
    {5.32f, 8.46f, 0.293f},
    {5.50f, 7.35f, 0.766f},
    {5.52f, 10.77f, 0.910f},
    {5.56f, 15.62f, 0.086f},
    {5.57f, 5.42f, 0.383f},
    {5.65f, 3.54f, 0.438f},
    {5.73f, 0.56f, 0.391f},
    {5.81f, 12.67f, 0.375f},
    {5.83f, 1.87f, 0.754f},
    {5.97f, 9.87f, 0.066f},
    {6.05f, 13.86f, 0.172f},
    {6.07f, 4.47f, 0.789f},
    {6.09f, 11.73f, 0.254f},
    {6.16f, 6.58f, 0.906f},
    {6.26f, 7.93f, 0.465f},
    {6.28f, 8.98f, 0.977f},
    {6.30f, 14.92f, 0.648f},
    {6.39f, 2.66f, 0.113f},
    {6.52f, 5.51f, 0.586f},
    {6.53f, 1.09f, 0.180f},
    {6.59f, 10.69f, 0.742f},
    {6.69f, 13.02f, 0.855f},
    {6.70f, 15.96f, 0.574f},
    {6.75f, 3.54f, 0.227f},
    {7.02f, 11.79f, 0.613f},
    {7.04f, 7.41f, 0.008f},
    {7.06f, 14.03f, 0.426f},
    {7.10f, 4.52f, 1.000f},
    {7.10f, 9.69f, 0.359f},
    {7.12f, 1.87f, 0.504f},
    {7.13f, 6.39f, 0.246f},
    {7.19f, 8.53f, 0.566f},
    {7.27f, 15.04f, 0.266f},
    {7.47f, 0.74f, 0.969f},
    {7.53f, 12.64f, 0.078f},
    {7.55f, 10.87f, 0.469f},
    {7.59f, 5.38f, 0.496f},
    {7.59f, 2.68f, 0.848f},
    {7.79f, 3.65f, 0.672f},
    {7.90f, 15.78f, 0.785f},
    {7.96f, 13.69f, 0.715f},
    {8.02f, 7.14f, 0.836f},
    {8.07f, 9.09f, 0.676f},
    {8.10f, 10.08f, 0.203f},
    {8.13f, 8.10f, 0.168f},
    {8.14f, 1.59f, 0.305f},
    {8.15f, 11.73f, 0.957f},
    {8.20f, 6.16f, 0.324f},
    {8.25f, 14.66f, 0.508f},
    {8.26f, 4.57f, 0.098f},
    {8.50f, 0.55f, 0.059f},
    {8.50f, 12.86f, 0.297f},
    {8.58f, 2.68f, 0.602f},
    {8.74f, 10.87f, 0.121f},
    {8.84f, 3.71f, 0.367f},
    {8.85f, 5.35f, 0.723f},
    {8.90f, 15.39f, 0.211f},
    {9.02f, 9.59f, 0.816f},
    {9.04f, 14.03f, 0.926f},
    {9.05f, 7.54f, 0.422f},
    {9.11f, 1.84f, 0.406f},
    {9.12f, 6.51f, 0.621f},
    {9.13f, 12.04f, 0.762f},
    {9.14f, 8.57f, 0.922f},
    {9.37f, 0.87f, 0.898f},
    {9.46f, 13.09f, 0.559f},
    {9.51f, 4.44f, 0.934f},
    {9.61f, 3.12f, 0.023f},
    {9.68f, 10.37f, 0.285f},
    {9.68f, 15.92f, 0.664f},
    {9.72f, 14.71f, 0.129f},
    {9.76f, 11.32f, 0.633f},
    {9.80f, 5.51f, 0.148f},
    {10.01f, 2.28f, 0.824f},
    {10.04f, 7.49f, 0.051f},
    {10.09f, 9.39f, 0.520f},
    {10.10f, 6.50f, 0.887f},
    {10.17f, 8.46f, 0.348f},
    {10.24f, 13.63f, 0.352f},
    {10.25f, 12.39f, 0.047f},
    {10.28f, 1.22f, 0.535f},
    {10.38f, 3.71f, 0.281f},
    {10.53f, 4.68f, 0.480f},
    {10.55f, 15.40f, 0.453f},
    {10.69f, 10.20f, 0.996f},
    {10.69f, 11.45f, 0.395f},
    {10.72f, 0.36f, 0.273f},
    {10.78f, 14.37f, 0.809f},
    {10.86f, 5.68f, 0.773f},
    {10.97f, 1.95f, 0.156f},
    {11.02f, 2.96f, 0.691f},
    {11.04f, 6.78f, 0.547f},
    {11.05f, 7.90f, 0.758f},
    {11.05f, 12.96f, 0.883f},
    {11.14f, 9.03f, 0.105f},
    {11.46f, 10.84f, 0.797f},
    {11.49f, 3.89f, 0.867f},
    {11.53f, 15.08f, 0.020f},
    {11.53f, 12.00f, 0.234f},
    {11.56f, 1.14f, 0.770f},
    {11.57f, 4.83f, 0.230f},
    {11.65f, 13.88f, 0.527f},
    {11.71f, 9.85f, 0.590f},
    {11.72f, 0.18f, 0.984f},
    {11.82f, 5.96f, 0.379f},
    {11.89f, 7.21f, 0.184f},
    {11.93f, 2.28f, 0.461f},
    {11.98f, 8.30f, 0.270f},
    {12.10f, 12.96f, 0.660f},
    {12.23f, 3.24f, 0.578f},
    {12.37f, 11.07f, 0.164f},
    {12.40f, 9.18f, 0.449f},
    {12.43f, 15.46f, 0.695f},
    {12.48f, 14.41f, 0.199f},
    {12.49f, 5.13f, 0.656f},
    {12.53f, 1.36f, 0.102f},
    {12.58f, 12.08f, 0.488f},
    {12.65f, 6.49f, 0.973f},
    {12.68f, 4.12f, 0.055f},
    {12.80f, 10.21f, 0.684f},
    {12.83f, 0.43f, 0.387f},
    {12.85f, 7.53f, 0.711f},
    {12.92f, 13.42f, 0.945f},
    {12.95f, 2.32f, 0.328f},
    {13.15f, 8.49f, 0.918f},
    {13.31f, 5.76f, 0.117f},
    {13.33f, 3.26f, 0.961f},
    {13.37f, 11.30f, 0.863f},
    {13.39f, 15.43f, 0.582f},
    {13.48f, 14.42f, 0.313f},
    {13.48f, 12.40f, 0.063f},
    {13.50f, 9.50f, 0.027f},
    {13.53f, 4.78f, 0.434f},
    {13.59f, 1.29f, 0.891f},
    {13.73f, 6.78f, 0.500f},
    {13.90f, 7.74f, 0.336f},
    {13.90f, 13.42f, 0.410f},
    {13.92f, 10.45f, 0.355f},
    {13.95f, 0.35f, 0.750f},
    {13.95f, 2.22f, 0.188f},
    {14.01f, 3.96f, 0.781f},
    {14.24f, 8.88f, 0.813f},
    {14.31f, 5.88f, 0.840f},
    {14.36f, 11.41f, 0.250f},
    {14.37f, 15.35f, 0.070f},
    {14.46f, 12.47f, 0.719f},
    {14.49f, 3.06f, 0.637f},
    {14.52f, 14.34f, 0.852f},
    {14.61f, 4.91f, 0.301f},
    {14.68f, 1.15f, 0.512f},
    {14.70f, 9.92f, 0.531f},
    {14.79f, 6.88f, 0.605f},
    {14.81f, 8.04f, 0.141f},
    {14.96f, 13.38f, 0.125f},
    {14.98f, 2.07f, 0.418f},
    {15.04f, 0.16f, 0.238f},
    {15.10f, 3.95f, 0.145f},
    {15.23f, 10.86f, 0.965f},
    {15.28f, 9.05f, 0.652f},
    {15.29f, 5.85f, 0.012f},
    {15.29f, 11.94f, 0.598f},
    {15.38f, 15.12f, 0.641f},
    {15.57f, 2.93f, 0.727f},
    {15.61f, 7.57f, 0.262f},
    {15.64f, 14.14f, 0.473f},
    {15.66f, 4.86f, 0.543f},
    {15.76f, 0.84f, 0.820f},
    {15.78f, 9.97f, 0.082f},
    {15.80f, 12.91f, 0.793f},
    {15.93f, 6.62f, 0.699f},
    {15.94f, 1.76f, 0.031f},
  };

  static Pattern s_Patterns[ezProcPlacementPattern::COUNT];

  bool FillPatterns()
  {
    s_Patterns[ezProcPlacementPattern::RegularGrid].m_Points = ezMakeArrayPtr(s_RegularGridPoints);
    s_Patterns[ezProcPlacementPattern::RegularGrid].m_fSize = 16.0f;

    s_Patterns[ezProcPlacementPattern::HexGrid].m_Points = ezMakeArrayPtr(s_HexGridPoints);
    s_Patterns[ezProcPlacementPattern::HexGrid].m_fSize = 16.0f;

    s_Patterns[ezProcPlacementPattern::Natural].m_Points = ezMakeArrayPtr(s_NaturalPoints);
    s_Patterns[ezProcPlacementPattern::Natural].m_fSize = 16.0f;

    return true;
  }

  static bool s_bFillPatternsDummy = FillPatterns();

  Pattern* GetPattern(ezProcPlacementPattern::Enum pattern)
  {
    return &s_Patterns[pattern];
  }
} // namespace ezProcGenInternal
